package priv.mill.security.web;

import javax.annotation.Resource;

import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloWorldController {

	@Resource
	private String now;
	
	@RequestMapping("/hello")
	public String hello() {
		return "hello"+now;
	}
	/**
	 * 需要管理员的权限才可以访问
	 * 1.用user权限登陆测试
	 * 2.将cookie删除，用admin登陆测试
	 * 
	 * 表达式说明如下：
	 * 	hasRole([role])					当前用户是否拥有指定角色。
		hasAnyRole([role1,role2])		多个角色是一个以逗号进行分隔的字符串。如果当前用户拥有指定角色中的任意一个则返回true。
		hasAuthority([auth])			等同于hasRole
		hasAnyAuthority([auth1,auth2])	等同于hasAnyRole
		Principle						代表当前用户的principle对象
		authentication					直接从SecurityContext获取的当前Authentication对象
		permitAll						总是返回true，表示允许所有的
		denyAll							总是返回false，表示拒绝所有的
		isAnonymous()					当前用户是否是一个匿名用户
		isRememberMe()					表示当前用户是否是通过Remember-Me自动登录的
		isAuthenticated()				表示当前用户是否已经登录认证成功了。
		isFullyAuthenticated()			如果当前用户既不是一个匿名用户，同时又不是通过Remember-Me自动登录的，则返回true。


	 * @return
	 */
	@RequestMapping("/admin")
	@PreAuthorize("hasRole('ADMIN')")
	public String admin() {
		return "欢迎管理员的驾临";
	}
	
	/**
	 * 获取用户信息并显示
	 * @return
	 */
	@RequestMapping("/show_user")
	@PreAuthorize("permitAll")
	public String showUser() {
		Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

		if (principal instanceof UserDetails) {
		    UserDetails principal2 = (UserDetails)principal;
		    String password = principal2.getPassword();
			String username = principal2.getUsername();
			return username+":"+password;
		} else {
		    String username = principal.toString();
		    return username;
		}

		
	}
}
